namespace DL.FSM
{
    public interface IState
    {
        /// <summary>
        /// 优先级
        /// </summary>
        public int priority { get; }
        
        /// <summary>
        /// 名称
        /// </summary>
        public string name { get; }
        public void Enter();
        /// <summary>
        /// 状态过渡检查，是否被用于过渡了。如果是，在这里处理。该方法会在Enter之前调用
        /// </summary>
        public bool StateTransitionCheck();
        /// <summary>
        /// 状态转换完成时调用一次
        /// </summary>
        /// <returns></returns>
        public void StateTransitionCompleted();
        public void Exit();
        public void HandleInput();
        /// <summary>
        /// 处理物理逻辑 
        /// </summary>
        public void FixedUpdate();
        public void Update();

        /// <summary>
        /// 处理 RootMotion运动时调用
        /// </summary>
        public void OnAnimationMove();
        public void OnAnimationTranslateEvent<T>() where T : IState;
        public void OnAnimationExitEvent();
    }
}
